Skip to content

Commit 3ab8413

Browse files
committed
Update documentation links to point to the GitHub repository for various labs, enhancing accessibility and consistency across chapters. This includes updates in the README files for LLM fundamentals, prompt engineering, tools and function calling, RAG, agent architecture, state management, security and governance, observability, cost-latency engineering, data privacy, and production readiness index.
1 parent 2f62f1d commit 3ab8413

26 files changed

Lines changed: 104 additions & 106 deletions

File tree

book/01-llm-fundamentals/README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -399,7 +399,7 @@ Not all models are equally good for agents.
399399

400400
**Theory:** See [Appendix: Capability Benchmark](../appendix/README.md#capability-benchmark-characterization) — detailed description of what we test and why it's important.
401401

402-
**Practice:** See [Lab 00: Model Capability Benchmark](../../labs/lab00-capability-check/README.md) — ready tool for testing the model.
402+
**Practice:** See [Lab 00: Model Capability Benchmark](https://github.com/kshvakov/ai-agent-course/tree/main/labs/lab00-capability-check) — ready tool for testing the model.
403403

404404
## Common Mistakes
405405

@@ -492,7 +492,7 @@ Original history (2000 tokens):
492492
- **Trimming:** Quick one-time tasks, history not important
493493
- **Summarization:** Long sessions, contextual information important, autonomous agents
494494

495-
See more: section "Context Optimization" in [Chapter 09: Agent Anatomy](../09-agent-architecture/README.md#context-optimization) and [Lab 09: Context Optimization](../../labs/lab09-context-optimization/README.md)
495+
See more: section "Context Optimization" in [Chapter 09: Agent Anatomy](../09-agent-architecture/README.md#context-optimization) and [Lab 09: Context Optimization](https://github.com/kshvakov/ai-agent-course/tree/main/labs/lab09-context-optimization)
496496

497497
### Mistake 3: LM Studio — Wrong Prompt Template (role support error)
498498

@@ -546,7 +546,7 @@ If you don't know something, say "I don't know" or use a tool.`
546546
- [x] Know how to set `Temperature = 0` for deterministic behavior
547547
- [x] Understand context window limitations
548548
- [x] Know how to manage conversation history (summarization or trimming)
549-
- [x] Model supports Function Calling (verified via Lab 00)
549+
- [x] Model supports Function Calling (verified via [Lab 00](https://github.com/kshvakov/ai-agent-course/tree/main/labs/lab00-capability-check))
550550
- [x] System Prompt forbids hallucinations
551551

552552
**Not completed:**

book/02-prompt-engineering/README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -277,9 +277,9 @@ Assistant: {"tool": "check_status", "args": {"hostname": "web-01"}} // Same for
277277
- **CoT → SOP:** SOP is a **process** fixed by instruction and/or examples. CoT helps the model follow this process step by step.
278278

279279
See more:
280-
- **[Lab 01: Basics](../../labs/lab01-basics/README.md)** — working with context and memory
281-
- **[Lab 02: Tools](../../labs/lab02-tools/README.md)** — response format via Function Calling
282-
- **[Lab 06: Incident (SOP)](../../labs/lab06-incident/README.md)** — SOP as action algorithm
280+
- **[Lab 01: Basics](https://github.com/kshvakov/ai-agent-course/tree/main/labs/lab01-basics)** — working with context and memory
281+
- **[Lab 02: Tools](https://github.com/kshvakov/ai-agent-course/tree/main/labs/lab02-tools)** — response format via Function Calling
282+
- **[Lab 06: Incident (SOP)](https://github.com/kshvakov/ai-agent-course/tree/main/labs/lab06-incident)** — SOP as action algorithm
283283

284284
## End-to-End Example: What Exactly the Agent Sends to LLM
285285

book/03-tools-and-function-calling/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -546,7 +546,7 @@ graph TB
546546
- The model sees the full context (system + user + tool call + tool result)
547547
- Generates final response: `"nginx is running normally, service ONLINE"`
548548

549-
**Note:** For Go implementation examples, see [Lab 02: Tools](../../labs/lab02-tools/README.md) and [Lab 04: Autonomy](../../labs/lab04-autonomy/README.md)
549+
**Note:** For Go implementation examples, see [Lab 02: Tools](https://github.com/kshvakov/ai-agent-course/tree/main/labs/lab02-tools) and [Lab 04: Autonomy](https://github.com/kshvakov/ai-agent-course/tree/main/labs/lab04-autonomy)
550550

551551
### Key Points for Developers
552552

@@ -570,7 +570,7 @@ graph TB
570570

571571
See how to write instructions and examples: **[Chapter 02: Prompting](../02-prompt-engineering/README.md)**
572572

573-
Practice: **[Lab 02: Tools](../../labs/lab02-tools/README.md)**, **[Lab 04: Autonomy](../../labs/lab04-autonomy/README.md)**
573+
Practice: **[Lab 02: Tools](https://github.com/kshvakov/ai-agent-course/tree/main/labs/lab02-tools)**, **[Lab 04: Autonomy](https://github.com/kshvakov/ai-agent-course/tree/main/labs/lab04-autonomy)**
574574

575575
### Why Is This Not Magic?
576576

book/06-rag/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ msg2 := resp2.Choices[0].Message
168168

169169
In this lab, we implement **simple RAG** (keyword search). In production, **vector search** (Semantic Search) is used, which searches by meaning, not by words.
170170

171-
**Simple RAG (Lab 07):**
171+
**Simple RAG ([Lab 07](https://github.com/kshvakov/ai-agent-course/tree/main/labs/lab07-rag)):**
172172
```go
173173
// Search by substring match
174174
if strings.Contains(content, query) {
@@ -696,7 +696,7 @@ var toolCatalog = []ToolDefinition{
696696

697697
For tool search, you can use two approaches: simple keyword search (for learning) and vector search (for production).
698698

699-
**Simple search (Lab 13):**
699+
**Simple search ([Lab 13](https://github.com/kshvakov/ai-agent-course/tree/main/labs/lab13-tool-retrieval)):**
700700
```go
701701
func searchToolCatalog(query string, topK int) []ToolDefinition {
702702
// Simple search by description and tags

book/09-agent-architecture/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -315,7 +315,7 @@ Thought: I'll analyze results and formulate conclusions.
315315

316316
### Plan-and-Solve
317317

318-
For complex tasks (Lab 06 Incident), ReAct may "get lost" in details.
318+
For complex tasks ([Lab 06](https://github.com/kshvakov/ai-agent-course/tree/main/labs/lab06-incident) Incident), ReAct may "get lost" in details.
319319

320320
**Architecture:**
321321

book/11-state-management/README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -250,7 +250,7 @@ func resumeTask(taskID string) error {
250250

251251
### Integration Point 1: Agent Loop
252252

253-
In `labs/lab04-autonomy/main.go` add state persistence:
253+
In [`labs/lab04-autonomy/main.go`](https://github.com/kshvakov/ai-agent-course/blob/main/labs/lab04-autonomy/main.go) add state persistence:
254254

255255
```go
256256
// At start of agent run:
@@ -275,7 +275,7 @@ saveTask(task)
275275

276276
### Integration Point 2: Tool Execution
277277

278-
In `labs/lab02-tools/main.go` add retry for tools:
278+
In [`labs/lab02-tools/main.go`](https://github.com/kshvakov/ai-agent-course/blob/main/labs/lab02-tools/main.go) add retry for tools:
279279

280280
```go
281281
func executeToolWithRetry(toolCall openai.ToolCall) (string, error) {
@@ -291,7 +291,7 @@ func executeToolWithRetry(toolCall openai.ToolCall) (string, error) {
291291

292292
## Mini Code Example
293293

294-
Complete example with workflow and state management based on `labs/lab04-autonomy/main.go`:
294+
Complete example with workflow and state management based on [`labs/lab04-autonomy/main.go`](https://github.com/kshvakov/ai-agent-course/blob/main/labs/lab04-autonomy/main.go):
295295

296296
```go
297297
package main

book/17-security-and-governance/README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -322,7 +322,7 @@ func logAudit(log AuditLog) {
322322

323323
### Integration Point 1: Tool Execution
324324

325-
In `labs/lab02-tools/main.go` add access check and confirmation:
325+
In [`labs/lab02-tools/main.go`](https://github.com/kshvakov/ai-agent-course/blob/main/labs/lab02-tools/main.go) add access check and confirmation:
326326

327327
```go
328328
func executeTool(toolCall openai.ToolCall, userRole UserRole) (string, error) {
@@ -357,7 +357,7 @@ func executeTool(toolCall openai.ToolCall, userRole UserRole) (string, error) {
357357

358358
### Integration Point 2: Human-in-the-Loop
359359

360-
In `labs/lab05-human-interaction/main.go` confirmations already exist. Extend them for risk scoring:
360+
In [`labs/lab05-human-interaction/main.go`](https://github.com/kshvakov/ai-agent-course/blob/main/labs/lab05-human-interaction/main.go) confirmations already exist. Extend them for risk scoring:
361361

362362
```go
363363
func requestConfirmation(toolCall openai.ToolCall) bool {
@@ -375,7 +375,7 @@ func requestConfirmation(toolCall openai.ToolCall) bool {
375375

376376
## Mini Code Example
377377

378-
Complete example with security based on `labs/lab05-human-interaction/main.go`:
378+
Complete example with security based on [`labs/lab05-human-interaction/main.go`](https://github.com/kshvakov/ai-agent-course/blob/main/labs/lab05-human-interaction/main.go):
379379

380380
```go
381381
package main

book/19-observability-and-tracing/README.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ func generateRunID() string {
9494

9595
### Step 3: Logging in Agent Loop
9696

97-
Insert logging into the agent loop (see `labs/lab04-autonomy/main.go`):
97+
Insert logging into the agent loop (see [`labs/lab04-autonomy/main.go`](https://github.com/kshvakov/ai-agent-course/blob/main/labs/lab04-autonomy/main.go)):
9898

9999
```go
100100
func runAgent(ctx context.Context, client *openai.Client, userInput string) (string, error) {
@@ -212,7 +212,7 @@ func logAgentRunError(runID string, err error) {
212212

213213
### Step 5: Tool Execution Logging
214214

215-
In tool execution functions (see `labs/lab02-tools/main.go`) add logging:
215+
In tool execution functions (see [`labs/lab02-tools/main.go`](https://github.com/kshvakov/ai-agent-course/blob/main/labs/lab02-tools/main.go)) add logging:
216216

217217
```go
218218
func executeToolWithLogging(runID string, toolCall openai.ToolCall) (string, error) {
@@ -252,7 +252,7 @@ func executeToolWithLogging(runID string, toolCall openai.ToolCall) (string, err
252252

253253
### Integration Point 1: Agent Loop
254254

255-
In `labs/lab04-autonomy/main.go` add logging to the agent loop:
255+
In [`labs/lab04-autonomy/main.go`](https://github.com/kshvakov/ai-agent-course/blob/main/labs/lab04-autonomy/main.go) add logging to the agent loop:
256256

257257
```go
258258
// At start of main():
@@ -271,7 +271,7 @@ log.Printf("TOOL_EXECUTED: run_id=%s tool=%s result=%s", runID, toolCall.Functio
271271

272272
### Integration Point 2: Tool Execution
273273

274-
In `labs/lab02-tools/main.go` add logging when executing tools:
274+
In [`labs/lab02-tools/main.go`](https://github.com/kshvakov/ai-agent-course/blob/main/labs/lab02-tools/main.go) add logging when executing tools:
275275

276276
```go
277277
// In tool execution function:
@@ -285,7 +285,7 @@ func executeTool(runID string, toolCall openai.ToolCall) (string, error) {
285285

286286
## Mini Code Example
287287

288-
Complete example with observability based on `labs/lab04-autonomy/main.go`:
288+
Complete example with observability based on [`labs/lab04-autonomy/main.go`](https://github.com/kshvakov/ai-agent-course/blob/main/labs/lab04-autonomy/main.go):
289289

290290
```go
291291
package main
@@ -1033,7 +1033,7 @@ metrics.RecordLatency("tool_execution_duration", latency, map[string]string{"too
10331033

10341034
### Exercise 1: Implement Structured Logging
10351035

1036-
Add structured logging to `labs/lab04-autonomy/main.go`:
1036+
Add structured logging to [`labs/lab04-autonomy/main.go`](https://github.com/kshvakov/ai-agent-course/blob/main/labs/lab04-autonomy/main.go):
10371037

10381038
```go
10391039
func logAgentRun(runID string, userInput string, toolCalls []ToolCall, result string) {

book/20-cost-latency-engineering/README.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ func checkTokenBudget(budget TokenBudget) error {
6464

6565
### Step 2: Iteration Limits
6666

67-
Limit the number of ReAct loop iterations (see `labs/lab04-autonomy/main.go`):
67+
Limit the number of ReAct loop iterations (see [`labs/lab04-autonomy/main.go`](https://github.com/kshvakov/ai-agent-course/blob/main/labs/lab04-autonomy/main.go)):
6868

6969
```go
7070
func runAgent(ctx context.Context, client *openai.Client, userInput string) (string, error) {
@@ -155,7 +155,7 @@ func setCachedResult(key string, result string, ttl time.Duration) {
155155

156156
### Step 4: Model Routing by Complexity
157157

158-
Use cheaper models for simple tasks (see `labs/lab09-context-optimization/main.go`):
158+
Use cheaper models for simple tasks (see [`labs/lab09-context-optimization/main.go`](https://github.com/kshvakov/ai-agent-course/blob/main/labs/lab09-context-optimization/main.go)):
159159

160160
```go
161161
func selectModel(taskComplexity string) string {
@@ -240,7 +240,7 @@ func runAgentWithTimeout(ctx context.Context, client *openai.Client, userInput s
240240

241241
### Integration Point 1: Agent Loop
242242

243-
In `labs/lab04-autonomy/main.go` add budget check and iteration limit:
243+
In [`labs/lab04-autonomy/main.go`](https://github.com/kshvakov/ai-agent-course/blob/main/labs/lab04-autonomy/main.go) add budget check and iteration limit:
244244

245245
```go
246246
const MaxIterations = 10
@@ -259,7 +259,7 @@ for i := 0; i < MaxIterations; i++ {
259259

260260
### Integration Point 2: Context Optimization
261261

262-
In `labs/lab09-context-optimization/main.go` token counting already exists. Add budget check:
262+
In [`labs/lab09-context-optimization/main.go`](https://github.com/kshvakov/ai-agent-course/blob/main/labs/lab09-context-optimization/main.go) token counting already exists. Add budget check:
263263

264264
```go
265265
func adaptiveContextManagement(ctx context.Context, client *openai.Client, messages []openai.ChatCompletionMessage, maxTokens int) []openai.ChatCompletionMessage {
@@ -276,7 +276,7 @@ func adaptiveContextManagement(ctx context.Context, client *openai.Client, messa
276276

277277
## Mini Code Example
278278

279-
Complete example with cost control based on `labs/lab04-autonomy/main.go`:
279+
Complete example with cost control based on [`labs/lab04-autonomy/main.go`](https://github.com/kshvakov/ai-agent-course/blob/main/labs/lab04-autonomy/main.go):
280280

281281
```go
282282
package main
@@ -864,7 +864,7 @@ if err == context.DeadlineExceeded {
864864

865865
### Exercise 1: Implement Token Budget Check
866866

867-
Add budget check to `labs/lab04-autonomy/main.go`:
867+
Add budget check to [`labs/lab04-autonomy/main.go`](https://github.com/kshvakov/ai-agent-course/blob/main/labs/lab04-autonomy/main.go):
868868

869869
```go
870870
func checkTokenBudget(used int, limit int) error {

book/24-data-and-privacy/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ func logWithRedaction(runID string, data map[string]any) {
8484

8585
### Integration Point: User Input
8686

87-
In `labs/lab05-human-interaction/main.go` sanitize input data:
87+
In [`labs/lab05-human-interaction/main.go`](https://github.com/kshvakov/ai-agent-course/blob/main/labs/lab05-human-interaction/main.go) sanitize input data:
8888

8989
```go
9090
userInput := sanitizePII(sanitizeSecrets(rawInput))

0 commit comments

Comments
 (0)