Практычныя прытамулкі: ад выкарыстання інфармацыі да логічных разлучэнняў: стварэнне агентав, гатовых да выкарыстання.
Практычныя прыказкі: ад выкарыстання да логікі: стварэнне агентных рашэнняў, гатовых да выкарыстання: кантракты, перакальбаванні і слоты для коду для команд, якія викорыстоўваюць гэты патэрн.
Існавайце гэта як перапрацоўаны варыянт ідэй з кніги «From Retrieval to Reasoning: Building Production-Ready Agentic AI Systems with Knowledge Graphs» для аператараў: чыткія этапы, аранжаваныя блакі коду і прыметкі па вяснаванню, якія застаюцца пасля перадачы. Этап Апглэву лепш працюе, калі яго розглядаць як вимерную паверхню. Запісайце адна ідеальная транскрыпцыя, адзін прыклад неудачы і прыметкі па анулюванні змян перш чым расширваць масштаб. Зберагаюце настройкі праза код аплікацыі. Файлы сяродавішча, хранільнікі секрэтных дадзеных і флагі функций должны знаходзіцца ў аднам месцы, якое аператары можаць пераглядаць без неабяжнага чытання всіх дадзеных.
from neo4j import GraphDatabase
import json
def get_grounded_context(user_query: str, entity_extractor, driver) -> str:
# Step 1: Extract entities from the user query
entities = entity_extractor(user_query) # e.g., ["Product X", "Supplier Y"]
# Step 2: Pull a relevant subgraph from Neo4j
with driver.session() as session:
result = session.run(
"""
MATCH (e)-[r]-(connected)
WHERE e.name IN $entities
RETURN e.name AS entity,
type(r) AS relationship,
connected.name AS related_entity,
connected.attributes AS attributes
LIMIT 50
""",
entities=entities
)
subgraph = [record.data() for record in result]
# Step 3: Format subgraph as structured context
context_str = json.dumps(subgraph, indent=2)
grounded_prompt = f"""
You are a reasoning agent. Use ONLY the following structured knowledge to answer.
If the answer isn't derivable from this context, say so explicitly.
KNOWLEDGE GRAPH CONTEXT:
{context_str}
USER QUERY: {user_query}
"""
return grounded_prompt
def plan_with_graph(goal: str, graph_schema: dict, llm) -> list[dict]:
schema_str = json.dumps(graph_schema, indent=2)
planning_prompt = f"""
You are a planning agent. Given the goal below, decompose it into steps.
Each step must reference a valid entity type or relationship from the schema.
Do not invent steps that require knowledge outside this schema.
GRAPH SCHEMA:
{schema_str}
GOAL: {goal}
Return a JSON list of steps. Each step must include:
- "action": what to do
- "graph_query": the Cypher query to retrieve required context
- "depends_on": list of prior step indices this step requires
"""
raw_plan = llm.complete(planning_prompt)
plan = json.loads(raw_plan)
return plan
def execute_with_validation(step: dict, intermediate_result: str, driver, llm) -> dict:
# Extract claims from the intermediate result
claim_extraction_prompt = f"""
Extract all factual claims from this text as a list of (subject, predicate, object) triples.
TEXT: {intermediate_result}
Return as JSON array.
"""
claims = json.loads(llm.complete(claim_extraction_prompt))
validation_results = []
with driver.session() as session:
for claim in claims:
result = session.run(
"""
MATCH (s {name: $subject})-[r]-(o {name: $object})
WHERE type(r) = $predicate OR $predicate IN r.aliases
RETURN count(r) AS match_count
""",
subject=claim["subject"],
predicate=claim["predicate"],
object=claim["object"]
)
record = result.single()
validation_results.append({
"claim": claim,
"validated": record["match_count"] > 0
})
unvalidated = [v for v in validation_results if not v["validated"]]
return {
"result": intermediate_result,
"validated": len(unvalidated) == 0,
"flagged_claims": unvalidated
}
Чэк-ліст для эксплуатацыі
Калі працуеце над этапам чэк-ліста для эксплуатацыі, спачатку запісайце умовы: неабяжныя вхідныя даны, сігнал успеху і тое, што выканаецца пад час частковай неудачы. Гэты чэк-ліст дапамагае заставіць пасляўсія змян у кодзе чыстымі.
Запісвайце часы выканання а таксу купонаў чы роезыкацый пры функцыянальных рэзультатах. Відразлівая візуабілізацыя костоў запобегае неспакойным рахункам, калі маршрут пераходзіць з дэмовай среды ў спяльнаныя сераўеры.
Зберагайце стабільныя інструкцыі системы і схемы інструментаў у кэшы. Павторная адправка ідэнтычных даных ўсё часта становіцца прычыной некальканадзесятага збільшэння витрачаных ресурсоў.
Раздзеліце правілы часткавага обробкі дадзеных ад правіл яўлення іх. Змена аднае з гэтых правіл не павинна прымусваць перапісвання другой, калі зменяюцыся паказнікі якосці.
Заставьце людзкую апраўду для тых крокаў, якія выкалічваюць грошы чы зменяюць даны ў працэсе виробніцтва. Компіляцыйныя налашчэння не ўзроўнаважваюцься з пачытальнасцю для бізнесу.
Следзіце за костамі і затрымкамі разам з паказнікамі якосці. Адпаведны рэзультат, які ў 10 разоў дарожыць менш, можа быць правым выборам для виробнічых цэлей.
Перш чым запускать даную систему, заморозьце версіі, зафіксавце ідеальны транскрыпт для критычнага шляху і паказвце спосабы анулювання змян. У спільных средах неабходны ліміты частоты запуска, пераконтрольванне прав на выкарыстоўвання ресурсаў і чысткі власнік для змены секретных даных. Лепш выбіраць простую надзею на надзейнасць, чым хітрыя разовыя дэманстрацыі.
Прыметка для 7e5e1dbfc22b: не кладзіце ключы прадаўцоў у репазітарый, задаце ліміт токена на кожную сесію і зберагачыце транскрыпты разам з фіксатрамі для ацэнкі, каб пазнейшыя замены моделяў заставаліся порównанневымі.
Прыметка па забезпечэнню надзейнасці на стадыі 0 работае лепш, калі яе спрыяваць як мерыемую плошчу. Зафіксавце адны ідеальны транскрыпт, адзін прыклад неудачы і прыметку па анулюванні змян перад расшырэнням масштаба. Лепш выбіраць маленькія, тэставаныя елементы, чым велікія скрыпты. Калі якая-небудзь ступеня не выйшла, прычына неудачы должна вказываць на адну конкрэтную адпаведальнасць, а не на заплутаны процес.
Дзеянне паўжасткі 0/956: звярніце увагу на час выканання, класы памылак і колькасць токенаў, выкорыстаных для гэтай змяны, а пасля, на аднойчынай базе паказаных дадзенняў, а не на індывідуальных прыкладах, выявіце, чы рэшацься застаўляць гэту змяну.
Для першага этапу паўжасткі неабходна ўзначыць вхідныя даны, адпаведальнага за выкананне крока і критэрыяы завершэння працы перш чым змяніць код. Аператары должны магчымае перадзвігнуць крок з вядомай точкі контролю, не прабуючы спадарацца пра схованы стан. Запісвайце час выканання і колькасць токенаў або запытак паляглі разам з функцыйнальнымі рэзультатамі. Відкрытая інформацыя пра витраты запобегае неспакою, калі процес пераходзіць з дэмаверсіі ў спяльныя среды.
Дзеянне паўжасткі 1/956: звярніце увагу на час выканання, класы памылак і колькасць токенаў, выкорыстаных для гэтай змяны, а пасля, на аднойчынай базе паказаных дадзенняў, а не на індывідуальных прыкладах, выявіце, чы рэшацься застаўляць гэту змяну.
Калі працуеце над 2-м ўрадземліваннем, спачатку запісайце угоду: неабяжлівыя даны, сігнал успеху і тое, што выходзіць у разе частковага неудачы. Такі список контролю дапамагае залічваць будучыя змены коду чыста.
Документавайце як шлях успеху, так і шлях вяснавання. Перапрыбуткі, людзкія контралі і обработка некоректных паведамленняў є частью продукту, а не наступным этапам дапрацоўкі.
2-й пункт урадземлівання з 956: вымерайце час выконання, класію памылак і витрату токенав для гэтага пункту, а потым выберайце, чы робіць змену на аднойчынных крэтарыях, а не на асоціяціях.
3-й ўрадземліванні лепш працюе, калі яго спрыяжваць з мерымяным аспектам. Запісайце адну ідеальную транскрыпцыю, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану, перш чым расширваць масштаб.
Спрыяжвайце гэты ўрадземліванні як угоду межа данымі і перакананымі выходамі. Дайце назвы артыфактам, задаце крэтарыі успеху і адмовіцеся ад мовчанкавага частковага завершэння.
Дзеянне паўжасткі 3/956: звярніце увагу на час выканання, класы памылак і витрату токенаў для гэтага зьязку, а пасля, на аднойчынай базе фіксаванага набору пытанняў, а не на індывідуальных прыкладах, выявіце, чы рашыцца застаўіць змяну.
Для 4-го этапа паўжасткі неабходна перад змянай коду чыста апісаць вхідныя даны, адпаведальнага за крок і критэрыя завершэння. Аперацыйныя працавнікі павінны магчымае перадзьвяжаць крок з вядомага пункта контролю, не прымусваныя здагадвацца пра схованы стан. Канфігурацыю трэба зберагчы за межамі коду прыемленае — файлы сяродавішча, хранальнікі секрэтных дадзеных і флагі функцыйяў павінны знаходзіцца ў адном месцы, якое працавнікі можуць пераглядаць, не чытаючы весь граф.
Дзеянне паўжасткі 4/956: звярніце увагу на час выканання, класы памылак і витрату токенаў для гэтага зьязку, а пасля, на аднойчынай базе фіксаванага набору пытанняў, а не на індывідуальных прыкладах, выявіце, чы рашыцца застаўіць змяну.
Калі працуеце над 5-м падземам прыемкі з ужорсткавання, спачатку запісайце шэраг: неабяжлівыя данні, сігнал успеху і тое, што выходзіць пад частыя неудачы. Такі список контроля дапамагае заліцвачыць пазнейшыя змены ў кодзе. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшае, неудача павінна вказваць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцюг задач.
Дзялей 5/956 прыемкі з ужорсткавання: вымерайце час выкарыстання, класыя ошибкі і колькасць токенаў, якія былі выкарыстаны для ція прыемкі, а пасля рашайце, чы робіць змены на адной фіксаванай сэтке пытанняў, а не на адной толькі прымітцы.
5-й падзем прыемкі з ужорсткавання работае лепей, калі яго спрыяваць як меравальную плошчу. Запісайце адны ідеальны прыклад работы, адзін кейс неудачы і прыміткі па адвярненню змэны, прычым не расширяйце сферу дзеяння. Запісвайце часы выкарыстання і косць токенаў або запытак праза функцыйнае рэзультат. Відкрытая інформацыя пра косцы з’являецца неспадзейкі, калі працэс пераходзіць з дамовай версіі ў спяльныя сераўы.
Дзеянне паўжчання 6/956: звярніце увагу на час выканання, клас памылакі і колькасць выкорыстоўваных токенаў для гэтага запісу, а пасля, на аднойчынай базе фіксаванага набору пытанняў, а не на асобістых спазыраннях, выявіце, чы робіць змены.
Для 7-й стадзіі паўжчання неабходна перад змянай коду чытко визначыць вхідныя даны, адпаведальнага за крок і критэрыя завершэння. Аперацыйныя працавнікі должны магчымае перадзвануць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Неабходна адначасова задокументаваць шлях успеху і шлях вярнення. Перапрыбуткі, людзкі контроль і обработка некоректных паведамленняў є частью продукту, а не чымсь, што дадаецца пазней.
Дзеянне паўжчання 7/956: звярніце увагу на час выканання, клас памылакі і колькасць выкорыстоўваных токенаў для гэтага запісу, а пасля, на аднойчынай базе фіксаванага набору пытанняў, а не на асобістых спазыраннях, выявіце, чы робіць змены.
Калі працуеце над 8-м стадзіяй упрабавання пры змяцненні, спачатку запісайце контракт: неабяжлівыя данні, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список пераконтроўвае чыстасць пазнейшых змян у кодзе. Спрыймайце гэтую стадзію як контракт межа даннімі і перакананымі выходамі. Дайце назву артыфактам, задаце критэрыя успеху і адмовіцеся ад мовчанкавага частковага завершэння.
Дзеянні з упрабаванням пры змяцненні 8/956: вымерайце час выканання, класію памылак і витрату токенав для гэтай змяны, а потым выберыце, чы рашыцца застаўіць змяну, стварываючыся на адной фіксаванай сэтцы пытанняў, а не на асобістых спазырэннях.
8-я стадзія упрабавання пры змяцненні працуе лепей, калі яе спрыймаюць як вымерлую паверхню. Запісайце адна ідеальная транскрыпцыя, адзін прыклад нявыпання і змест запісу пра анулюванне, перш чым расширваць масштаб. Зберагайце настройкі параду ўнутры коду прыемленае. Файлы сяродавішча, хранільнікі секрэтных дадзенняў і флагі функций должны знаходзіцца ў аднам месцы, якое аператары можаць пераканаліць, не чытаючы весь граф.
Дзеянне паўжчання 9/956: звярніце увагу на час выканання, клас памылакі і колькасць выкорыстоўваных токенаў для гэтага запісу, а пасля, на аднойчынай базе фіксаванага набору пытанняў, а не на асобістых спазырах, выявіце, чы хацяце застаўіць змены.
Для 10-го этапу паўжчання неабходна перад змянай коду чытка апісаць вхідныя даны, адпаведальнага за крок і критэрыя завершэння. Аперацыяныя працавнікі должны магчымае перадзваначыць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Лепш выбіраць маленькія, тэставаныя елементы замест большых скрыптов. Калі крок не выйшоў, прычына нехарактернага рэзультата должна быць адносна конкретнай адпаведальнасці, а не сложнай сэткі крокаў.
Дзеянне паўжчання 10/956: звярніце увагу на час выканання, клас памылакі і колькасць выкорыстоўваных токенаў для гэтага запісу, а пасля, на аднойчынай базе фіксаванага набору пытанняў, а не на асобістых спазырах, выявіце, чы хацяце застаўіць змены.
Калі працуеце над стадзіяй 11 занятків паўнейшага захавання, спачатку запісайце умовы кантракту: неабходныя даны, сігнал успеху і тое, што выходзіць пад частым неудачам. Такі список контроля дапамагае залишыцца часовым у празменніках коду. Запісвайце час выканання і вартасьць токенаў або запытак пад функцыйнальнымі рэзултатамі. Відразы вартасцей з самага пачатку запобегае неспакою, калі процес пераходзіць з дэмаверсіі ў спяльныя среды.
Дзеянне паўнейшага захавання 11/956: замерайце час выканання, класы паканаў і витраты токенаў для гэтага пункту, а потым выберайце, чы робіць змены на адной пазначанай базе пытанняў, а не на адной толькі прымітцы.
Стадзіяй 12 занятків паўнейшага захавання працюе лепей, калі яе спрыяваць як меравальную плошчу. Запісвайце адну ідеальную транскрыпцыю, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану, перш чым расширваць масштаб. Дакументавайце як успішны, так і вярнэнчы паты. Перапрыбуткі, людзкія контралі і обработка неканальных паканаў є часткай продукту, а не чымсь, што дадаецца пазней.
Дзеянне паўжчання 12/956: звярніце увагу на час выканання, клас памылак і колькасць викорыстоўваных токенав для гэтага зьязку, а пасля, на аднойчынай базе фіксаванага набору пытанняў, а не на індывідуальных прыкладах, выявіце, чы хацяце застаўіць гэтыя змены.