@sylix/coworker 2.0.10 → 2.0.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/slash/config.d.ts.map +1 -1
- package/dist/commands/slash/config.js +23 -5
- package/dist/commands/slash/config.js.map +1 -1
- package/dist/commands/slash/todo.js +1 -1
- package/dist/commands/slash/todo.js.map +1 -1
- package/dist/core/CoWorkerAgent.d.ts.map +1 -1
- package/dist/core/CoWorkerAgent.js +6 -3
- package/dist/core/CoWorkerAgent.js.map +1 -1
- package/dist/permissions/PermissionInterceptor.js +1 -1
- package/dist/permissions/PermissionInterceptor.js.map +1 -1
- package/dist/skills/defaults/accessibility/screen-reader-testing.md +545 -0
- package/dist/skills/defaults/accessibility/wcag-audit-patterns.md +555 -0
- package/dist/skills/defaults/ai-ml/rag.md +276 -0
- package/dist/skills/defaults/backend-development/api-design-principles.md +528 -0
- package/dist/skills/defaults/backend-development/api-design.md +285 -0
- package/dist/skills/defaults/backend-development/architecture-patterns.md +494 -0
- package/dist/skills/defaults/backend-development/async-python.md +237 -0
- package/dist/skills/defaults/backend-development/auth-implementation-patterns.md +638 -0
- package/dist/skills/defaults/backend-development/bazel-build-optimization.md +387 -0
- package/dist/skills/defaults/backend-development/billing-automation/SKILL.md +566 -0
- package/dist/skills/defaults/backend-development/code-review-excellence.md +538 -0
- package/dist/skills/defaults/backend-development/cqrs-implementation.md +554 -0
- package/dist/skills/defaults/backend-development/database-design.md +305 -0
- package/dist/skills/defaults/backend-development/debugging-strategies.md +536 -0
- package/dist/skills/defaults/backend-development/e2e-testing-patterns.md +544 -0
- package/dist/skills/defaults/backend-development/error-handling-patterns.md +641 -0
- package/dist/skills/defaults/backend-development/fastapi-templates.md +559 -0
- package/dist/skills/defaults/backend-development/fastapi.md +309 -0
- package/dist/skills/defaults/backend-development/git-advanced-workflows.md +405 -0
- package/dist/skills/defaults/backend-development/microservices-patterns.md +595 -0
- package/dist/skills/defaults/backend-development/microservices.md +284 -0
- package/dist/skills/defaults/backend-development/monorepo-management.md +623 -0
- package/dist/skills/defaults/backend-development/nodejs-backend-patterns.md +1048 -0
- package/dist/skills/defaults/backend-development/nx-workspace-patterns.md +457 -0
- package/dist/skills/defaults/backend-development/paypal-integration/SKILL.md +478 -0
- package/dist/skills/defaults/backend-development/pci-compliance/SKILL.md +480 -0
- package/dist/skills/defaults/backend-development/python-anti-patterns.md +349 -0
- package/dist/skills/defaults/backend-development/python-background-jobs.md +364 -0
- package/dist/skills/defaults/backend-development/python-code-style.md +360 -0
- package/dist/skills/defaults/backend-development/python-configuration.md +368 -0
- package/dist/skills/defaults/backend-development/python-design-patterns.md +296 -0
- package/dist/skills/defaults/backend-development/python-error-handling.md +323 -0
- package/dist/skills/defaults/backend-development/python-packaging.md +887 -0
- package/dist/skills/defaults/backend-development/python-performance-optimization.md +874 -0
- package/dist/skills/defaults/backend-development/python-project-structure.md +252 -0
- package/dist/skills/defaults/backend-development/python-resilience.md +376 -0
- package/dist/skills/defaults/backend-development/python-resource-management.md +421 -0
- package/dist/skills/defaults/backend-development/python-type-safety.md +428 -0
- package/dist/skills/defaults/backend-development/sql-optimization-patterns.md +509 -0
- package/dist/skills/defaults/backend-development/stripe-integration/SKILL.md +522 -0
- package/dist/skills/defaults/backend-development/turborepo-caching.md +376 -0
- package/dist/skills/defaults/blockchain/defi-protocol-templates.md +430 -0
- package/dist/skills/defaults/blockchain/nft-standards.md +364 -0
- package/dist/skills/defaults/blockchain/solidity-security.md +514 -0
- package/dist/skills/defaults/blockchain/web3-testing.md +360 -0
- package/dist/skills/defaults/business/competitive-landscape/SKILL.md +527 -0
- package/dist/skills/defaults/business/market-sizing-analysis/SKILL.md +451 -0
- package/dist/skills/defaults/business/startup-financial-modeling/SKILL.md +494 -0
- package/dist/skills/defaults/business/startup-metrics-framework/SKILL.md +564 -0
- package/dist/skills/defaults/business/team-composition-analysis.md +437 -0
- package/dist/skills/defaults/compliance/employment-contract-templates/SKILL.md +527 -0
- package/dist/skills/defaults/compliance/gdpr-data-handling/SKILL.md +630 -0
- package/dist/skills/defaults/data-engineering/airflow-dag-patterns.md +436 -0
- package/dist/skills/defaults/data-engineering/airflow.md +519 -0
- package/dist/skills/defaults/data-engineering/data-quality.md +583 -0
- package/dist/skills/defaults/data-engineering/dbt-transformation-patterns.md +482 -0
- package/dist/skills/defaults/data-engineering/dbt.md +556 -0
- package/dist/skills/defaults/data-engineering/ml-pipeline-workflow/SKILL.md +247 -0
- package/dist/skills/defaults/data-engineering/spark-optimization.md +348 -0
- package/dist/skills/defaults/data-engineering/spark.md +411 -0
- package/dist/skills/defaults/database/postgresql.md +202 -0
- package/dist/skills/defaults/debugging/systematic-debugging.md +249 -0
- package/dist/skills/defaults/devops/architecture-decision-records.md +448 -0
- package/dist/skills/defaults/devops/changelog-automation.md +580 -0
- package/dist/skills/defaults/devops/cicd.md +314 -0
- package/dist/skills/defaults/devops/cloud.md +263 -0
- package/dist/skills/defaults/devops/code-review-excellence.md +299 -0
- package/dist/skills/defaults/devops/cost-optimization.md +295 -0
- package/dist/skills/defaults/devops/deployment-pipeline-design.md +356 -0
- package/dist/skills/defaults/devops/docker.md +281 -0
- package/dist/skills/defaults/devops/git-workflows.md +205 -0
- package/dist/skills/defaults/devops/github-actions.md +311 -0
- package/dist/skills/defaults/devops/gitlab-ci-patterns.md +266 -0
- package/dist/skills/defaults/devops/hybrid-cloud-networking.md +241 -0
- package/dist/skills/defaults/devops/istio-traffic-management.md +327 -0
- package/dist/skills/defaults/devops/kubernetes.md +339 -0
- package/dist/skills/defaults/devops/linkerd-patterns.md +311 -0
- package/dist/skills/defaults/devops/multi-cloud-architecture.md +181 -0
- package/dist/skills/defaults/devops/observability.md +243 -0
- package/dist/skills/defaults/devops/openapi-spec-generation.md +1024 -0
- package/dist/skills/defaults/devops/postmortem-writing.md +396 -0
- package/dist/skills/defaults/devops/prometheus-configuration.md +265 -0
- package/dist/skills/defaults/devops/secrets-management.md +341 -0
- package/dist/skills/defaults/devops/service-mesh-observability.md +385 -0
- package/dist/skills/defaults/devops/terraform-module-library.md +244 -0
- package/dist/skills/defaults/finance/backtesting-frameworks/SKILL.md +663 -0
- package/dist/skills/defaults/finance/risk-metrics-calculation/SKILL.md +557 -0
- package/dist/skills/defaults/frontend/accessibility-compliance.md +420 -0
- package/dist/skills/defaults/frontend/design-system-patterns.md +337 -0
- package/dist/skills/defaults/frontend/interaction-design.md +327 -0
- package/dist/skills/defaults/frontend/javascript.md +311 -0
- package/dist/skills/defaults/frontend/modern-javascript-patterns.md +927 -0
- package/dist/skills/defaults/frontend/react-native-design.md +440 -0
- package/dist/skills/defaults/frontend/react.md +345 -0
- package/dist/skills/defaults/frontend/responsive-design.md +472 -0
- package/dist/skills/defaults/frontend/tailwind-design-system.md +337 -0
- package/dist/skills/defaults/frontend/typescript-advanced-types.md +724 -0
- package/dist/skills/defaults/frontend/typescript.md +334 -0
- package/dist/skills/defaults/frontend/visual-design-foundations.md +326 -0
- package/dist/skills/defaults/frontend/web-component-design.md +279 -0
- package/dist/skills/defaults/game-development/godot-gdscript-patterns.md +188 -0
- package/dist/skills/defaults/game-development/unity-ecs-patterns.md +594 -0
- package/dist/skills/defaults/kubernetes/gitops-workflow.md +285 -0
- package/dist/skills/defaults/kubernetes/gitops.md +280 -0
- package/dist/skills/defaults/kubernetes/helm-chart-scaffolding.md +553 -0
- package/dist/skills/defaults/kubernetes/helm.md +343 -0
- package/dist/skills/defaults/kubernetes/k8s-manifest-generator.md +501 -0
- package/dist/skills/defaults/kubernetes/k8s-security-policies.md +342 -0
- package/dist/skills/defaults/kubernetes/manifests.md +330 -0
- package/dist/skills/defaults/kubernetes/security.md +337 -0
- package/dist/skills/defaults/llm-application/embedding-strategies.md +608 -0
- package/dist/skills/defaults/llm-application/hybrid-search-implementation.md +570 -0
- package/dist/skills/defaults/llm-application/hybrid-search.md +570 -0
- package/dist/skills/defaults/llm-application/langchain-architecture.md +666 -0
- package/dist/skills/defaults/llm-application/langchain.md +259 -0
- package/dist/skills/defaults/llm-application/llm-evaluation.md +695 -0
- package/dist/skills/defaults/llm-application/prompt-engineering-patterns.md +449 -0
- package/dist/skills/defaults/llm-application/prompt-engineering.md +219 -0
- package/dist/skills/defaults/llm-application/rag-implementation.md +434 -0
- package/dist/skills/defaults/llm-application/similarity-search-patterns.md +560 -0
- package/dist/skills/defaults/llm-application/similarity-search.md +560 -0
- package/dist/skills/defaults/llm-application/vector-index-tuning.md +523 -0
- package/dist/skills/defaults/mobile/mobile-android-design.md +440 -0
- package/dist/skills/defaults/mobile/mobile-ios-design.md +266 -0
- package/dist/skills/defaults/monitoring/distributed-tracing.md +436 -0
- package/dist/skills/defaults/monitoring/grafana-dashboards.md +370 -0
- package/dist/skills/defaults/monitoring/prometheus-configuration.md +379 -0
- package/dist/skills/defaults/monitoring/slo-implementation.md +323 -0
- package/dist/skills/defaults/refactoring/code-refactoring.md +349 -0
- package/dist/skills/defaults/security/anti-reversing-techniques/SKILL.md +559 -0
- package/dist/skills/defaults/security/auditor.md +168 -0
- package/dist/skills/defaults/security/binary-analysis-patterns/SKILL.md +438 -0
- package/dist/skills/defaults/security/memory-forensics/SKILL.md +483 -0
- package/dist/skills/defaults/security/mtls-configuration.md +349 -0
- package/dist/skills/defaults/security/protocol-reverse-engineering/SKILL.md +520 -0
- package/dist/skills/defaults/security/sast-configuration.md +182 -0
- package/dist/skills/defaults/security/security.md +313 -0
- package/dist/skills/defaults/security/stride-analysis.md +273 -0
- package/dist/skills/defaults/security/threat-mitigation-mapping.md +290 -0
- package/dist/skills/defaults/systems/bash-defensive-patterns/SKILL.md +539 -0
- package/dist/skills/defaults/systems/bats-testing-patterns/SKILL.md +631 -0
- package/dist/skills/defaults/systems/go-concurrency-patterns.md +657 -0
- package/dist/skills/defaults/systems/memory-safety-patterns.md +605 -0
- package/dist/skills/defaults/systems/rust-async-patterns.md +519 -0
- package/dist/skills/defaults/systems/shellcheck-configuration/SKILL.md +456 -0
- package/dist/skills/defaults/team-collaboration/multi-reviewer-patterns.md +126 -0
- package/dist/skills/defaults/team-collaboration/parallel-feature-development.md +151 -0
- package/dist/skills/defaults/testing/javascript-testing-patterns.md +1021 -0
- package/dist/skills/defaults/testing/python-testing-patterns.md +351 -0
- package/dist/skills/defaults/testing/testing.md +332 -0
- package/dist/skills/defaults/workflows/context-driven-development.md +384 -0
- package/dist/skills/defaults/workflows/track-management.md +592 -0
- package/dist/skills/defaults/workflows/workflow-patterns.md +622 -0
- package/dist/skills/index.d.ts +11 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +129 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/utils/character.js +6 -9
- package/dist/utils/character.js.map +1 -1
- package/dist/utils/contextManager.js +3 -7
- package/dist/utils/contextManager.js.map +1 -1
- package/dist/utils/inputbar.d.ts.map +1 -1
- package/dist/utils/inputbar.js +8 -1
- package/dist/utils/inputbar.js.map +1 -1
- package/dist/utils/output.d.ts.map +1 -1
- package/dist/utils/output.js +3 -35
- package/dist/utils/output.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: langchain-architecture
|
|
3
|
+
description: Design LLM applications using LangChain 1.x and LangGraph for agents, memory, and tool integration. Use when building LangChain applications, implementing AI agents, or creating complex LLM workflows.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# LangChain & LangGraph Architecture
|
|
7
|
+
|
|
8
|
+
Master modern LangChain 1.x and LangGraph for building sophisticated LLM applications with agents, state management, memory, and tool integration.
|
|
9
|
+
|
|
10
|
+
## When to Use This Skill
|
|
11
|
+
|
|
12
|
+
- Building autonomous AI agents with tool access
|
|
13
|
+
- Implementing complex multi-step LLM workflows
|
|
14
|
+
- Managing conversation memory and state
|
|
15
|
+
- Integrating LLMs with external data sources and APIs
|
|
16
|
+
- Creating modular, reusable LLM application components
|
|
17
|
+
- Implementing document processing pipelines
|
|
18
|
+
- Building production-grade LLM applications
|
|
19
|
+
|
|
20
|
+
## Package Structure (LangChain 1.x)
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
langchain (1.2.x) # High-level orchestration
|
|
24
|
+
langchain-core (1.2.x) # Core abstractions
|
|
25
|
+
langchain-community # Third-party integrations
|
|
26
|
+
langgraph # Agent orchestration
|
|
27
|
+
langchain-openai # OpenAI integrations
|
|
28
|
+
langchain-anthropic # Anthropic/Claude integrations
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Core Concepts
|
|
32
|
+
|
|
33
|
+
### 1. LangGraph Agents
|
|
34
|
+
|
|
35
|
+
LangGraph is the standard for building agents:
|
|
36
|
+
|
|
37
|
+
**Key Features:**
|
|
38
|
+
- **StateGraph**: Explicit state management with typed state
|
|
39
|
+
- **Durable Execution**: Agents persist through failures
|
|
40
|
+
- **Human-in-the-Loop**: Inspect and modify state at any point
|
|
41
|
+
- **Memory**: Short-term and long-term memory across sessions
|
|
42
|
+
- **Checkpointing**: Save and resume agent state
|
|
43
|
+
|
|
44
|
+
**Agent Patterns:**
|
|
45
|
+
- **ReAct**: Reasoning + Acting with `create_react_agent`
|
|
46
|
+
- **Plan-and-Execute**: Separate planning and execution nodes
|
|
47
|
+
- **Multi-Agent**: Supervisor routing between specialized agents
|
|
48
|
+
- **Tool-Calling**: Structured tool invocation with Pydantic schemas
|
|
49
|
+
|
|
50
|
+
### 2. State Management
|
|
51
|
+
|
|
52
|
+
```python
|
|
53
|
+
from typing import Annotated, TypedDict
|
|
54
|
+
from langgraph.graph import MessagesState
|
|
55
|
+
|
|
56
|
+
class AgentState(MessagesState):
|
|
57
|
+
"""Extends MessagesState with custom fields."""
|
|
58
|
+
context: Annotated[list, "retrieved documents"]
|
|
59
|
+
|
|
60
|
+
class CustomState(TypedDict):
|
|
61
|
+
messages: Annotated[list, "conversation history"]
|
|
62
|
+
context: Annotated[dict, "retrieved context"]
|
|
63
|
+
current_step: str
|
|
64
|
+
results: list
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### 3. Memory Systems
|
|
68
|
+
|
|
69
|
+
- **ConversationBufferMemory**: Stores all messages
|
|
70
|
+
- **ConversationSummaryMemory**: Summarizes older messages
|
|
71
|
+
- **ConversationTokenBufferMemory**: Token-based windowing
|
|
72
|
+
- **VectorStoreRetrieverMemory**: Semantic similarity retrieval
|
|
73
|
+
- **LangGraph Checkpointers**: Persistent state across sessions
|
|
74
|
+
|
|
75
|
+
## Quick Start
|
|
76
|
+
|
|
77
|
+
### Modern ReAct Agent with LangGraph
|
|
78
|
+
|
|
79
|
+
```python
|
|
80
|
+
from langgraph.prebuilt import create_react_agent
|
|
81
|
+
from langgraph.checkpoint.memory import MemorySaver
|
|
82
|
+
from langchain_anthropic import ChatAnthropic
|
|
83
|
+
from langchain_core.tools import tool
|
|
84
|
+
|
|
85
|
+
llm = ChatAnthropic(model="claude-sonnet-4-6", temperature=0)
|
|
86
|
+
|
|
87
|
+
@tool
|
|
88
|
+
def search_database(query: str) -> str:
|
|
89
|
+
"""Search internal database for information."""
|
|
90
|
+
return f"Results for: {query}"
|
|
91
|
+
|
|
92
|
+
@tool
|
|
93
|
+
def calculate(expression: str) -> str:
|
|
94
|
+
"""Safely evaluate a mathematical expression."""
|
|
95
|
+
import ast, operator
|
|
96
|
+
allowed = {ast.Add: operator.add, ast.Sub: operator.sub, ast.Mult: operator.mul}
|
|
97
|
+
try:
|
|
98
|
+
tree = ast.parse(expression, mode='eval')
|
|
99
|
+
return str(allowed[type(tree.body.op)](eval(str(tree.body.left)), eval(str(tree.body.right))))
|
|
100
|
+
except:
|
|
101
|
+
return "Error"
|
|
102
|
+
|
|
103
|
+
tools = [search_database, calculate]
|
|
104
|
+
checkpointer = MemorySaver()
|
|
105
|
+
|
|
106
|
+
agent = create_react_agent(llm, tools, checkpointer=checkpointer)
|
|
107
|
+
|
|
108
|
+
config = {"configurable": {"thread_id": "user-123"}}
|
|
109
|
+
result = await agent.ainvoke(
|
|
110
|
+
{"messages": [("user", "Search for tutorials and calculate 25 * 4")]},
|
|
111
|
+
config=config
|
|
112
|
+
)
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
## Architecture Patterns
|
|
116
|
+
|
|
117
|
+
### Pattern 1: RAG with LangGraph
|
|
118
|
+
|
|
119
|
+
```python
|
|
120
|
+
from langgraph.graph import StateGraph, START, END
|
|
121
|
+
from langchain_anthropic import ChatAnthropic
|
|
122
|
+
from langchain_voyageai import VoyageAIEmbeddings
|
|
123
|
+
from langchain_pinecone import PineconeVectorStore
|
|
124
|
+
from typing import TypedDict, Annotated
|
|
125
|
+
|
|
126
|
+
class RAGState(TypedDict):
|
|
127
|
+
question: str
|
|
128
|
+
context: list
|
|
129
|
+
answer: str
|
|
130
|
+
|
|
131
|
+
def retrieve(state: RAGState) -> RAGState:
|
|
132
|
+
retriever = PineconeVectorStore.from_existing_index(
|
|
133
|
+
index_name="docs",
|
|
134
|
+
embedding=VoyageAIEmbeddings(model="voyage-3-large")
|
|
135
|
+
).as_retriever()
|
|
136
|
+
docs = retriever.invoke(state["question"])
|
|
137
|
+
return {"context": docs}
|
|
138
|
+
|
|
139
|
+
def generate(state: RAGState) -> RAGState:
|
|
140
|
+
llm = ChatAnthropic(model="claude-sonnet-4-6")
|
|
141
|
+
prompt = f"Context: {state['context']}\nQuestion: {state['question']}"
|
|
142
|
+
response = llm.invoke(prompt)
|
|
143
|
+
return {"answer": response.content}
|
|
144
|
+
|
|
145
|
+
graph = StateGraph(RAGState)
|
|
146
|
+
graph.add_node("retrieve", retrieve)
|
|
147
|
+
graph.add_node("generate", generate)
|
|
148
|
+
graph.add_edge(START, "retrieve")
|
|
149
|
+
graph.add_edge("retrieve", "generate")
|
|
150
|
+
graph.add_edge("generate", END)
|
|
151
|
+
|
|
152
|
+
app = graph.compile()
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### Pattern 2: Plan-and-Execute Agent
|
|
156
|
+
|
|
157
|
+
```python
|
|
158
|
+
from langgraph.graph import StateGraph, START
|
|
159
|
+
from typing import TypedDict
|
|
160
|
+
|
|
161
|
+
class PlanExecuteState(TypedDict):
|
|
162
|
+
input: str
|
|
163
|
+
plan: list
|
|
164
|
+
past_steps: list
|
|
165
|
+
response: str
|
|
166
|
+
|
|
167
|
+
planner_prompt = """Create a step-by-step plan for: {input}"""
|
|
168
|
+
executor_prompt = """Execute step: {step}\nPrevious: {past_steps}"""
|
|
169
|
+
|
|
170
|
+
def plan(state: PlanExecuteState) -> PlanExecuteState:
|
|
171
|
+
llm = ChatAnthropic(model="claude-sonnet-4-6")
|
|
172
|
+
response = llm.invoke(planner_prompt.format(input=state["input"]))
|
|
173
|
+
return {"plan": response.content.split("\n")}
|
|
174
|
+
|
|
175
|
+
def execute(state: PlanExecuteState) -> PlanExecuteState:
|
|
176
|
+
# Execute current step
|
|
177
|
+
pass
|
|
178
|
+
|
|
179
|
+
graph = StateGraph(PlanExecuteState)
|
|
180
|
+
graph.add_node("plan", plan)
|
|
181
|
+
graph.add_node("execute", execute)
|
|
182
|
+
graph.add_edge(START, "plan")
|
|
183
|
+
graph.add_edge("plan", "execute")
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
### Pattern 3: Multi-Agent Supervisor
|
|
187
|
+
|
|
188
|
+
```python
|
|
189
|
+
from langgraph.prebuilt import create_react_agent
|
|
190
|
+
|
|
191
|
+
research_agent = create_react_agent(llm, [search_tool], state_schema=ResearchState)
|
|
192
|
+
write_agent = create_react_agent(llm, [write_tool], state_schema=WriteState)
|
|
193
|
+
|
|
194
|
+
def supervisor(state: AgentState) -> str:
|
|
195
|
+
"""Route to appropriate agent."""
|
|
196
|
+
return "research" if "research" in state["messages"][-1].content else "write"
|
|
197
|
+
|
|
198
|
+
graph = StateGraph(AgentState)
|
|
199
|
+
graph.add_node("supervisor", supervisor)
|
|
200
|
+
graph.add_node("research", research_agent)
|
|
201
|
+
graph.add_node("write", write_agent)
|
|
202
|
+
|
|
203
|
+
graph.add_edge(START, "supervisor")
|
|
204
|
+
graph.add_conditional_edges("supervisor",
|
|
205
|
+
lambda x: x["next"],
|
|
206
|
+
{"research": "research", "write": "write"})
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
### Pattern 4: Tool Calling Agent
|
|
210
|
+
|
|
211
|
+
```python
|
|
212
|
+
from langchain_anthropic import ChatAnthropic
|
|
213
|
+
from langchain_core.utils.function_calling import convert_to_openai_function
|
|
214
|
+
|
|
215
|
+
llm = ChatAnthropic(model="claude-sonnet-4-6")
|
|
216
|
+
functions = [convert_to_openai_function(my_pydantic_model)]
|
|
217
|
+
structured_llm = llm.bind_functions(functions)
|
|
218
|
+
|
|
219
|
+
# Auto-invokes correct tool based on schema
|
|
220
|
+
response = structured_llm.invoke("Extract info from: ...")
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
## Memory Patterns
|
|
224
|
+
|
|
225
|
+
### Conversation Memory
|
|
226
|
+
|
|
227
|
+
```python
|
|
228
|
+
from langchain.memory import ConversationBufferMemory
|
|
229
|
+
from langgraph.checkpoint.postgres import PostgresSaver
|
|
230
|
+
|
|
231
|
+
# Short-term memory
|
|
232
|
+
memory = ConversationBufferMemory(return_messages=True)
|
|
233
|
+
|
|
234
|
+
# Long-term with PostgreSQL
|
|
235
|
+
checkpointer = PostgresSaver.from_conn_string("postgresql://...")
|
|
236
|
+
agent = create_react_agent(llm, tools, checkpointer=checkpointer)
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
### Summary Memory
|
|
240
|
+
|
|
241
|
+
```python
|
|
242
|
+
from langchain.memory import ConversationSummaryMemory
|
|
243
|
+
|
|
244
|
+
memory = ConversationSummaryMemory(
|
|
245
|
+
llm=ChatAnthropic(model="claude-sonnet-4-6"),
|
|
246
|
+
return_messages=True
|
|
247
|
+
)
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
## Best Practices
|
|
251
|
+
|
|
252
|
+
1. **Use LangGraph** - Standard for production agents in 2026
|
|
253
|
+
2. **Define typed state** - Use TypedDict for explicit state management
|
|
254
|
+
3. **Checkpoint critical flows** - PostgresSaver for durability
|
|
255
|
+
4. **Implement error handling** - Graph can handle failures gracefully
|
|
256
|
+
5. **Use structured outputs** - Pydantic schemas for tools
|
|
257
|
+
6. **Monitor with LangSmith** - Essential for production debugging
|
|
258
|
+
7. **Modularize nodes** - Reusable components
|
|
259
|
+
8. **Human-in-the-loop** - Allow inspection/modification
|