Kolmannen osapuolen OpenAI yhteensopiva rajapinta ei välttämättä tue OpenAI:n omaa verkkohakutyökalua. Yleiskäyttöinen ratkaisu on hakea tiedot ensin Tavilyn Search API:lla ja lähettää hakutulokset yhdessä TXT datan kanssa mallille analysoitaviksi.
Research answer

Create a landscape editorial hero image for this Studio Global article: 我想让其在分析数据的时候连接网络搜索,帮我改一下代码,另外它会有记忆吗?我之前喂给它的东西会记得吗. Article summary: 可以,但你当前使用的是第三方 OpenAI 兼容接口,无法确定 deepseek v4 flash 是否原生支持联网工具。官方 OpenAI 的内置网页搜索主要通过 Responses API 提供,而第三方 base url 不一定兼容该功能。[5] 因此,下面采用更通用的方案:程序先调用 Tavily 搜索互联网,再把搜索结果连同 TXT 数据一起交给模型分析;Tavily 支持通过 API Key 调用搜索接口并返回结构化结果。[. Topic tags: deepresearch, general web, openai, agents, prompt engineering. Style: premium digital editorial illustration, source-backed research mood, clean composition, high detail, modern web publication hero. Use reference image context only for broad subject, composition, and topical grounding; do not copy the exact image. Avoid: logos, brand marks, copyrighted characters, real person likenesses, fake screenshots, UI text, readable text, watermarks, charts with fake numbers, clickbait thumbnails, icons, and tiny thumbnail layout
Kyllä, verkkohaku on mahdollista lisätä analyysiputkeen. Nykyinen toteutuksesi käyttää kolmannen osapuolen OpenAI-yhteensopivaa rajapintaa, joten ei ole varmaa, että malli deepseek-v4-flash tai käytössä oleva base_url tukee OpenAI:n natiivisia verkkohakutyökaluja. OpenAI:n oma verkkohaku on tarkoitettu Responses API:n kautta käytettäväksi, eivätkä kolmannen osapuolen rajapinnat välttämättä ole sen kanssa yhteensopivia. 5
Siksi käytännöllisin ratkaisu on erottaa työvaiheet toisistaan:
Tavily käyttää API-avainta ja palauttaa hakutulokset rakenteisessa muodossa. 1
3
Koodissasi mallin vastauksen lukeminen näyttää olevan muodossa:
content = response.choices.message.content
OpenAI-yhteensopivissa Chat Completions -vastauksissa ensimmäinen valinta pitää yleensä lukea indeksillä:
content = response.choices.message.content
Muuten ohjelma voi kaatua, koska choices on lista.
Asenna tarvittavat paketit:
pip install openai requests
Aseta API-avaimet ympäristömuuttujiin. Windows PowerShellissä:
$env:AI_API_KEY="oma AI API -avaimesi"
$env:AI_BASE_URL="käyttämäsi rajapinnan Base URL"
$env:TAVILY_API_KEY="oma Tavily API -avaimesi"
Määrittele Pythonissa esimerkiksi seuraavat asetukset:
import os
import requests
TAVILY_SEARCH_URL = "https://api.tavily.com/search"
SEARCH_RESULTS_PER_QUERY = 5
SEARCH_DEPTH = "advanced"
TAVILY_API_KEY = os.getenv("TAVILY_API_KEY", "")
Varsinainen hakufunktio voi olla tämän kaltainen:
def search_tavily(query):
if not TAVILY_API_KEY:
raise ValueError("TAVILY_API_KEY puuttuu")
headers = {
"Authorization": f"Bearer {TAVILY_API_KEY}",
"Content-Type": "application/json",
}
payload = {
"query": query,
"search_depth": SEARCH_DEPTH,
"max_results": SEARCH_RESULTS_PER_QUERY,
"include_answer": False,
"include_raw_content": False,
"include_images": False,
}
response = requests.post(
TAVILY_SEARCH_URL,
headers=headers,
json=payload,
timeout=60,
)
response.raise_for_status()
return response.json().get("results", [])
Hakutuloksista kannattaa säilyttää ainakin otsikko, URL-osoite ja lyhyt sisältökatkelma. Sen jälkeen ne voidaan muotoilla mallille esimerkiksi näin:
def format_web_context(results):
if not results:
return "Verkk haun tuloksia ei löytynyt."
parts = []
for index, result in enumerate(results, start=1):
parts.append(
f"[W{index}]\n"
f"Otsikko: {result.get('title', 'Ei otsikkoa')}\n"
f"URL: {result.get('url', '')}\n"
f"Tiivistelmä: {result.get('content', '')}\n"
)
return "\n".join(parts)
Tämän jälkeen web_context lisätään samaan käyttäjäviestiin kuin nykyinen TXT-datan osa:
user_prompt = f"""
Analysoi alla oleva TXT-data.
DATA BEGIN
{chunk}
DATA END
Käytä seuraavia verkkolähteitä vain yleisten teknisten ilmiöiden
selittämiseen. Merkitse niitä käyttävät väitteet lähdeviitteillä [W1],
[W2] ja niin edelleen.
WEB BEGIN
{web_context}
WEB END
"""
Mallille kannattaa antaa selkeät rajat: x ja X tarkoittavat puuttuvaa tai virheellistä arvoa, eivät nollaa. Verkkolähteiden yleisiä periaatteita ei myöskään pidä esittää tämän tietyn datan suorina johtopäätöksinä. Jos lähde ja mittaustulos ovat ristiriidassa, ristiriita on tuotava näkyvästi esiin.
Voit käyttää joko valmiiksi kirjoitettuja kyselyitä tai pyytää mallia muodostamaan ne TXT-tiedoston sarakenimien perusteella. Esimerkiksi puolijohdedatan yhteydessä kyselyt voivat käsitellä seuraavia aiheita:
USER_SEARCH_QUERIES = [
"MOSFET gate length threshold voltage Idsat Ioff DIBL subthreshold swing",
"semiconductor device VtSat VtLin IdSat IdLin Ioff tradeoff",
]
Automaattinen haku kannattaa rajoittaa muutamaan kyselyyn. Älä lähetä hakukyselyihin projektin nimiä, salaisia tunnisteita tai suuria määriä raakadataa. Tavilyn search_depth-asetus vaikuttaa haun laajuuden ja nopeuden väliseen kompromissiin. 4
Ei automaattisesti. chat.completions.create() on käytännössä tilaton: mallille täytyy lähettää aiempi keskusteluhistoria tai muu muistisisältö jokaisen uuden pyynnön yhteydessä. Sama client-olio tai sama mallinimi ei itsessään luo pysyvää muistia. 2
6
Voit kuitenkin rakentaa muistin itse. Yksinkertainen tapa on tallentaa viimeisin lopullinen analyysiraportti tiedostoon:
from pathlib import Path
from datetime import datetime
MEMORY_FILE = Path("analysis_memory.txt")
ENABLE_PERSISTENT_MEMORY = False
MEMORY_INPUT_MAX_CHARS = 12000
MEMORY_FILE_MAX_CHARS = 50000
Muistin lukeminen:
def load_memory():
if not ENABLE_PERSISTENT_MEMORY or not MEMORY_FILE.exists():
return ""
text = MEMORY_FILE.read_text(encoding="utf-8")
return text[-MEMORY_INPUT_MAX_CHARS:]
Raportin tallentaminen:
def save_memory(final_report):
if not ENABLE_PERSISTENT_MEMORY:
return
old_memory = ""
if MEMORY_FILE.exists():
old_memory = MEMORY_FILE.read_text(encoding="utf-8")
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
new_record = (
f"\n\n{'=' * 72}\n"
f"Analyysiaika: {timestamp}\n"
f"{'=' * 72}\n"
f"{final_report}\n"
)
memory = old_memory + new_record
memory = memory[-MEMORY_FILE_MAX_CHARS:]
MEMORY_FILE.write_text(memory, encoding="utf-8")
Lähetä ladattu muisti mallille vain taustatietona:
memory_text = load_memory()
memory_context = f"""
Aiempi paikallinen analyysimuisti:
{memory_text or 'Aiempi muisti puuttuu.'}
Älä käytä muistin vanhoja numeroita nykyisen datan arvoina.
Jos muisti ja nykyinen TXT-data ovat ristiriidassa, nykyinen data on etusijalla.
"""
Muisti kannattaa pitää oletusarvoisesti pois käytöstä, jos analysoit eri projekteja tai eri komponentteja. Muuten vanhat johtopäätökset voivat vaikuttaa uuteen analyysiin. Lisäksi tiedosto analysis_memory.txt sisältää aiempia raportteja, joten se pitää suojata samalla tavalla kuin muutkin projektin tiedostot.
Kokonaisuus kannattaa rakentaa seuraavassa järjestyksessä:
web_sources.txt.analysis_result.txt-tiedostoon.ENABLE_PERSISTENT_MEMORY = True.Näin verkkohaku, datan analysointi ja muisti pysyvät erillisinä toimintoina. Se helpottaa myös virheiden jäljittämistä: voit tarkistaa web_sources.txt-tiedostosta, mihin lähteisiin mallin viitteet [W1], [W2] ja niin edelleen perustuvat.
Studio Global AI
This page includes a source-backed answer you can continue inside Studio Global.
Kolmannen osapuolen OpenAI yhteensopiva rajapinta ei välttämättä tue OpenAI:n omaa verkkohakutyökalua.
Kolmannen osapuolen OpenAI yhteensopiva rajapinta ei välttämättä tue OpenAI:n omaa verkkohakutyökalua. Yleiskäyttöinen ratkaisu on hakea tiedot ensin Tavilyn Search API:lla ja lähettää hakutulokset yhdessä TXT datan kanssa mallille analysoitaviksi.
Chat Completions ei muista aiempia pyyntöjä automaattisesti, vaikka käyttäisit samaa asiakasoliota tai mallia.