Галоўная / Артыкулы / Практычныя прытамулкі: стварэнне агента для традынгу з LangChain і API EODHD

Практычныя прытамулкі: стварэнне агента для традынгу з LangChain і API EODHD

Практычныя прыказкі: стварэнне агента для трыхтавання з LangChain і API EODHD: контракты, пераконтрэнняі та месцы для коду для команд, якія викорыстоўваюць гэты патэрн.

1992 слоў

У гэтым керавану практычна перакладзець шлях ад сыр'ёў да рабочай системы для стварэння агента для трыбухі з LangChain і API EODHD. Акцэнт ставяцца на практычныя крокі, чысткія пераконтрацыі і код, які можна проста дадзець у репазітарый без неабясненняя меты. У стадіўцы «Аптаварыс» неабходна з'явіць вхідныя даны, адпаведальнага за крок і критэрыя завершэння прычым перад зменай коду. Аперацыйныя працавнікі должны магчымае перадзець крок з вядомай точкі контролю без неабясненняя схованага стану. Запісваць час выконання і кост токенаў або запытаў разам з функцыйнальнымі рэзултатамі. Відразы костаў з самага пачатку запобегае неспакойным рахункам, калі шлях пераходзіць з дэмаверсіі ў спакульнаныя сераўысы.

Короткая сутнасць

Калі працюеце на стадыі TL DR, спачатку запісайце умовы контракту: неабяжлівыя даны, сигнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список контроля дапамагае заліцвачыць змяны ў кодзе пазнейша. Зберагайце настройкі за межамі коду прыемліка. Файлы сераўнавання, хранільнікі секрэтных данных і флагі функцыйяў должны знаходзіцца ў аднам месцы, куды аператары можаць адбавіць аудыт без неабяжлівага чытання всей структуры. Ставьце контрольныя пункты пасля дорогіх крокаў. Система вярнення роботы не должна занова ставіць плату за той самы вызов LLM, калі аператар перапрыяўляе роботу да наступнага элемента.

Проблема не ў інтэлекте моделі

Калі працуеце над рашыяннем проблемы, спачатку запісайце умовы её рашэння: неабяжлівыя даны, сігнал успеху і тое, што выканаецца у разы ў частковай няудачы. Такі список контроля дапамагае заліцьварыць пазнейшыя змены ў кодзе. Дакументавайце як шлях успеху, так і шлях вярнення да нормальнага стану. Перапрыбуткі, людзкія перакрыцця і обробка некоректных паведамленняў є часткай продукту, а не элементамі пазнейшага дапрацоўкі. Зберагайце у кэшы стабільныя інструкцыі системы і схемы інструментаў. Перасылка ідэнтычных паведамленняў є частым выкліком для ресурсаў.

Рэальная проблема: нехватка інструментаў, а не нехватка логіки

Калі працуеце над стадзіяй «Недастычная рэальная проблема», спачатку запісайце контракт: неабяжлівыя даны, сігнал успеху і тое, што выканаецца пад частковай нявыходзе. Такі список пераканаецца, каб пазнейшыя змены коду былі чыстымі. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшае, нявыходзь должна паказваць на адну адпаведальнасць, а не на заплутаны ланцюг задач. Зберагаеце у кэшы стабільныя інструкцыі системы і схемы інструментаў. Перадзесланне ідэнтычных прамаўляючых частак — частая прычына збытків. Калі працуеце над стадзіяй «Недастычная рэальная проблема», спачатку запісайце контракт: неабяжлівыя даны, сігнал успеху і тое, што выканаецца пад частковай нявыходзе. Такі список пераканаецца, каб пазнейшыя змены коду былі чыстымі. Запісвайце час выканання і кост токенаў або запытаў пад функцыйнальнымі рэзултатамі. Відразувая візуабельнасць костаў запобегае неспакойным рахункам, калі процес пераходзіць з дэмаверсіі ў спяльныя среды.

LangChain + EODHD: стак

LangChain EODHD стэйдж стака працюе наякраўей, калі яго спрыята як мерыемая паверхня. Зафіксавайце адна ідеальная транскрыпцыю, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану, перш чым расширваць сферу дзеяння. Зберагаюце настройкі пазыроўна ад коду прыемліцеля. Файлы сераўнавальной среды, хранільнікі секрэтных дадзеных і флагі функций должны знаходзіцца ў аднам месцы, куды аператары можаць адбавляць контроль без неабяжнага чытання всіх дадзеных. Зберагаюце стан графа ў простам і типаваным формате. Вярнутыя блокі маскуюць інфармацыю пра тое, який вузел запісаў які поле, і спакшуюць возз'яданне пасля перерываў.

Працыскі і недзеяскі викорыстоўвання EODHD як шара дадзеных для вашага агента

Працэўнае выкарыстоўванне сцэнарыяў ўсё лепша адбываецца, калі яго спрыяглядаць як мерыемую структуру. Запісайте адны успешны прыклад, адну справу з неудачай і прыметку па вярнэнню да пачатковага стану пры расшырэнні масштаба. Дакументавайце як успешны, так і вярнучыся шляхі роботы. Перапрыбуткі, людзкія контрольны пункты і обработка некоректных паведамленняў є часткай продукту, а не элементамі пазнейшага дапрацоўвання. Зберагайце стан графа ў простам і типаваным формате. Вярнутыя структуры маскуюць інфармацыю пра тое, який вузел запісаў канкрэтны поле, і спакшуюць продовжэнне роботы пасля перарываў.

Архітектура агента LLM: як на самай працэўці цикл разумовага аналізу

Архітектура агента LLM працюе найэфектывней, калі яе розглядаць як меравальную плошчу. Перш чым расширваць масштаб, зафіксавайце адны ідеальны прымер роботы, адзін кейс неудачы і прыметкі па адвярненню змян. Валіце маленькія, тэставальныя елементы замест большых скрыптов. Калі якісь крок не выходзіць, прычына неудачы должна быць асоўваная з адной конкрэтнаяя відпаведальнасцю, а не з заплутаным ланцоўкам задач. Задаць ліміт токенав на кожны рунд і на кожную сесію. Інструменты агента актыўна расширваюць контекст; строгі ліміты запобегаюць таму, каб дэманстрацыі ператварыліся на неспакоючыя рахункі. Архітектура агента LLM працюе найэфектывней, калі яе розглядаць як меравальную плошчу. Перш чым расширваць масштаб, зафіксавайце адны ідеальны прымер роботы, адзін кейс неудачы і прыметкі па адвярненню змян. Запісваўце часы выконання і кост токенав або запытаў разам з функцыйнальнымі рэзультатамі. Відразлівасць костаў з самага пачатку запобегае неспакоючым рахункам, калі процес пераходзіць з дэманстрацыі ў спяльныя сераўы.

Thought: I need the current price first.
Action: get_live_price("AAPL.US")
Observation: AAPL.US: current price 227.50, change +0.8%
Thought: Price alone isn't enough — check momentum.
Action: get_rsi("AAPL.US")
Observation: AAPL.US — RSI(14): 58.3Thought: Not overbought. Check if valuation is reasonable.
Action: get_fundamentals("AAPL.US")
Observation: AAPL.US — PE: 31.2, Market Cap: 3.4T, Dividend Yield: 0.4%Thought: I now have enough data to answer.
Final Answer: [synthesized response]

Адаптаванне: стварэнне агента

У падзеўцы адаптавання, якая займаецца стварэннем агента, перш чым зменяць код, неабходна визначыць даннэ, якія будуць прыйманы, адпаведальнага за кожны крок і критэрыя завершэння. Аператары должны магчымаць перзапуск кроку з вядомай точкі контролю, не падозрываючы прыхованы стан. Конфігурацыю трэба залічыць паза кодам прыемліка. Файлы сяродавішняе сераўісу, хранілішчы секрэтных дадзеных і флагі функцыйяў должны знаходзіцца ў аднам месцы, куда аператары можуць адбавіць аудыт, не чытаючы весь граф. Даецца можлівасць апраўдкі чалавека для рэшэнняе, якія выкарыстоўваюць грошы або зменяюць даннэ прарабочага сераўісу. Прыўязкі ў часе компілявання не адпавядаюць пачатковай цэлесообразнасі бізнесу.

1. Установка

У стадії 1 – інсталяцыі – пярэд зменым коду неабходна ўзначыць вхідныя даны, адпаведальнага за крок і критэрыя завершэння. Аперацыёныя працавнікі должны магчымае запускаць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Неабходна адначасова документацыя як успішнаг, так і варыянтнага падходу. Перапрыбуткі, людзкія перакрыцця та обробка некоректных паведамленняў є часткай продукту, а не элементамі пазнейшага дапрацоўвання. Пры кроках, які выкалічваюць грошы або зменяюць даны прадукцыі, неабходна людзкая апраўда. Прыєднанне элементаў у час компіляцыі не ўзначае повнайшага адпрацоўвання продукту з точкі зору бізнеса.

pip install langchain langchain-openai requests

2. Узначыць інструменты

У стадії «2. Адакцыя інструментаў» перад зменым коду неабходна адакцыя вхідных дадзеных, адпаведальнага за шаг і крэтарыяў завершэння. Аперацыйныя працавнікі должны магчымае перзапускаць шаг з вядомай точкі контролю, не падозрываючы прыхованы стан. Лепш выбіраць маленькія, тэставаныя елементы замест большых скрыптаў. Калі шаг не выйшоў, прычына неудачы должна вказываць на адну конкрэтную адпаведальнасць, а не на заплутаны процес. Автентыфікуйцеся на входзе і паўторна автарызуйцеся на роўні дадзеных. Толькі токэн-носіцель не є межай адпаведальнасцяў. У стадії «2. Адакцыя інструментаў» перад зменым коду неабходна адакцыя вхідных дадзеных, адпаведальнага за шаг і крэтарыяў завершэння. Аперацыйныя працавнікі должны магчымае перзапускаць шаг з вядомай точкі контролю, не падозрываючы прыхованы стан. Запісвайце час выконання і кост токэна або запыту разам з функцыйнымі рэзультатамі. Відразлівасць костаў з самага пачатку запобегае неспакойным рахункам, калі процес пераходзіць з дэмовай среды ў спакульную.

import requests
from langchain.tools import tool
EODHD_API_KEY = "YOUR_API_KEY"
BASE_URL = "https://eodhd.com/api"
@tool
def get_live_price(ticker: str) -> str:
    """Returns the current price of a stock. Example ticker: AAPL.US"""
    url = f"{BASE_URL}/real-time/{ticker}"
    params = {"api_token": EODHD_API_KEY, "fmt": "json"}
    r = requests.get(url, params=params).json()
    return f"{ticker}: current price {r['close']}, change {r['change_p']}%"
@tool
def get_fundamentals(ticker: str) -> str:
    """Returns key fundamental metrics: PE ratio, market cap, dividend yield."""
    url = f"{BASE_URL}/fundamentals/{ticker}"
    params = {"api_token": EODHD_API_KEY}
    r = requests.get(url, params=params).json()
    highlights = r.get("Highlights", {})
    return (
        f"{ticker} - PE: {highlights.get('PERatio')}, "
        f"Market Cap: {highlights.get('MarketCapitalization')}, "
        f"Dividend Yield: {highlights.get('DividendYield')}"
    )
@tool
def get_rsi(ticker: str) -> str:
    """Returns the 14-day RSI to assess overbought or oversold conditions."""
    url = f"{BASE_URL}/technical/{ticker}"
    params = {"api_token": EODHD_API_KEY, "function": "rsi", "period": 14, "fmt": "json"}
    r = requests.get(url, params=params).json()
    latest = r[-1]
    return f"{ticker} - RSI(14): {latest['rsi']} as of {latest['date']}"

3. Стварыце агента

Калі працуеце над 3-й стадзіяю «Стварыце агента», спачатку запісайте умовы кантракту: неабяжлівыя даны, сигнал успеху і тое, што выканаецца у разы частковага нявыполнення. Такі список контроля дапамагае заліцвачыць змяны ў кодзе пасля таго. Зберагаюце настройкі за межамі коду прыемліка. Файлы сераўнавання, хранільнікі секрэтных дадзеных і флагі функцый крануцца ў аднам месцы, якое аператары можаюць пераглядаць без неабяжлівага чытання всей структуры. Ставяйце контрольныя пункты пасля дорогіх крокаў. Функцыя вярнення роботы не должна занова ставіць плата за той самы вызов LLM, калі аператар перапрыяўляе роботу да наступнага вузла.

from langchain_openai import ChatOpenAI
from langchain.agents import create_react_agent, AgentExecutor
from langchain import hub

llm = ChatOpenAI(model="gpt-4o", temperature=0)
tools = [get_live_price, get_fundamentals, get_rsi]

prompt = hub.pull("hwchase17/react")
agent = create_react_agent(llm, tools, prompt)
executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
prompt = hub.pull("hwchase17/react")
agent = create_react_agent(llm, tools, prompt)
executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

Прыклад выкарыстоўвання

Калі працуеце над этапам разработкі на прыкладах, спачатку запісайце умовы працы: неабяжлівыя данні, сігнал успеху і тое, што выходзіць пад частыя неудачы. Такі список контролю дапамагае заліцвачыць змяны ў кодзе.

response = executor.invoke({
    "input": "Should we be looking at AAPL.US right now?"
})
print(response["output"])

Галоўныя выводы

Калі працюеце на стадыі «Ключовыя выводы», спачатку запісайце умовы працы: неабяжлівыя данні, сигнал успеху і тое, што выканаецца у разы частковага нявыполнення. Такі список пераканальвае залічваты змяны ў кодзе чыста. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшоў, прычына нявыполнення павінна вказываць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцужок задач. Зробіце перапактаванне пасля дорогіх крокаў. Система не павинна знову стягваць плата за той самы вызов LLM, калі аператар праказвае пазнейшы вузел. Калі працюеце на стадыі «Ключовыя выводы», спачатку запісайце умовы працы: неабяжлівыя данні, сигнал успеху і тое, што выканаецца у разы частковага нявыполнення. Такі список пераканальвае залічваты змяны ў кодзе чыста. Запісвайце час выканання і кост токенав або запытаў праза функцыйнае рэзультат. Відкрытыя данні пра косцы з’являюцца рана, таму не будзе неспадзянак у вылічэннях, калі процес пераходзіць з дамовай версіі ў спяльныя сераўы.

Часта задаваемыя запытанні

Этап FAQ працюе найкраща, калі яго розглядаць як меркавыя плошча. Зберагучы адны ідеальны транскрыпт, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану, перш чым расширваць сферу дзеяння.

Чэк-ліст для эксплуатацыі

Этап чэк-ліста для эксплуатацыі працюе найкраща, калі яго розглядаць як меркавыя плошча. Зберагучы адны ідеальны транскрыпт, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану, перш чым расширваць сферу дзеяння.

Разглядайце этап як кантракт межа вхіднымі даннымі і перакананымі выходнымі рэзультатамі. Даўайце назвы артыфактам, задаюце критэрыя успеху і адмовляйцеся ад беззвучнага частковага завершэння.

Зберагаюце стан графа ў простам і типаваным формате. Вкладаныя блобы маскуюць інфармацію пра тое, який вузел запісаў якое поле, і спакоююць працэз виконання пасля перерываў.

Калі дозволяе бюджет, дадзіце тэст на перакананне, які працюе над критычным шляхам у системе CI з викорыстаннем фіксатываў, а не рэальных платных API.

Запісвайце час виконання адпаведна да вартасці токена чытае запита разам з функцыйнальнымі рэзултатамі. Відразы вартасці з самага пачатку запобегае неспакою, калі шлях пераходзіць з дэмаверсіі ў спакульнаныя сераўсы.

Зберагаюце стан графа ў простам і типаваным формате. Вкладаныя блобы маскуюць інфармацію пра тое, який вузел запісаў якое поле, і спакоююць працэз виконання пасля перерываў.

Перш чым апранаваць стак, заморозьце версіі, зафіксуйце ідеальны транскрыпт для критычнага шляху і паказвайце крокі для адворачэння змян. У спакульных сераўсы неабходны ліміты на колькасць запытоў, перакананні ў прыналежнасці і чысткі власнік для змены секрэтных даных. Валіце надзейнасць працы над красавімі разовымі дэмамі.

Запіскі для пакета 3ffe365c45fb: не класты ключі прадаўцоў у репазітарыю, задаць максымальны тэрмін дзейнасці токена на кожную сесію, а таксама зберагчы транскрыпціі празаўсюды з фікстурамі для ацэнкі, каб пазнейшыя замены моделяў заставаліся пораўнанымі.