用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/jeremylongshore/tons-of-skills-marketplace --skill openevidence-sdk-patterns命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
正在显示 SKILL.md
Deploy a LangChain 1.0 / LangGraph 1.0 app to Cloud Run, Vercel, or LangServe correctly — with timeouts sized for chain length, cold-start mitigation, SSE anti-buffering headers, and Secret Manager over .env. Use when prepping a first production deploy, debugging a stream that hangs behind a proxy, or diagnosing p99 latency spikes. Trigger with "langchain deploy", "langchain cloud run", "langchain vercel python", "langchain langserve", or "langchain docker".
Build a correct LangGraph 1.0 ReAct agent with create_react_agent — typed tools, error propagation, recursion caps, and stop conditions that actually stop. Use when writing a first tool-calling agent, migrating from AgentExecutor or initialize_agent, or diagnosing an agent that loops on vague prompts. Trigger with "langgraph agent", "create_react_agent", "langgraph tool calling", "AgentExecutor migration", or "agent loop cost".
Build LangGraph 1.0 human-in-the-loop approval flows with interrupt_before / interrupt_after and Command(resume=...) — JSON-serializable state, clean resume semantics, and UI wiring for approval decisions. Use when adding an approval gate before an expensive tool call, wiring a Slack/web UI for agent approvals, or debugging a graph that crashes on interrupt. Trigger with "langgraph human in loop", "langgraph interrupt_before", "langgraph approval flow", "Command resume", "langgraph HITL".
| name | openevidence-sdk-patterns |
| description | Sdk Patterns for OpenEvidence. Trigger: "openevidence sdk patterns". |
| allowed-tools | Read, Write, Edit |
| version | 1.13.0 |
| license | MIT |
| author | Jeremy Longshore <jeremy@intentsolutions.io> |
| tags | ["saas","openevidence","healthcare"] |
| compatibility | Designed for Claude Code |
Production-ready patterns for the OpenEvidence clinical evidence API. OpenEvidence provides REST endpoints for querying medical literature, retrieving clinical guidelines, and generating evidence-based recommendations. The API authenticates via OPENEVIDENCE_API_KEY and returns structured clinical data with citation provenance. A singleton client enforces consistent auth, handles healthcare-specific errors, and preserves citation chains for audit compliance.
const OE_BASE = 'https://api.openevidence.com/v1';
let _client: OpenEvidenceClient | null = null;
export function getClient(): OpenEvidenceClient {
if (!_client) {
const apiKey = process.env.OPENEVIDENCE_API_KEY;
if (!apiKey) throw new Error('OPENEVIDENCE_API_KEY must be set — get it from openevidence.com/developer');
_client = new OpenEvidenceClient(apiKey);
}
return _client;
}
class OpenEvidenceClient {
private headers: Record<string, string>;
constructor(apiKey: string) { this.headers = { 'Authorization': `Bearer ${apiKey}`, 'Content-Type': 'application/json' }; }
async query(question: string, opts: { specialty?: string; maxResults?: } = {}): <> {
res = (, { : , : .,
: .({ question, : opts., : opts. ?? }) });
(!res.) (res., res.()); res.();
}
(: ): <> {
res = (, { : . });
(!res.) (res., res.()); res.();
}
}
export class OEError extends Error {
constructor(public status: number, message: string) { super(message); this.name = 'OEError'; }
}
export async function safeCall<T>(operation: string, fn: () => Promise<T>): Promise<T> {
try { return await fn(); }
catch (err: any) {
if (err instanceof OEError && err.status === 429) { await new Promise(r => setTimeout(r, 5000)); return fn(); }
if (err instanceof OEError && err.status === 401) throw new OEError(401, );
(err && err. === ) (, );
(err. ?? , );
}
}
class OEQueryBuilder {
private body: Record<string, any> = {};
question(q: string) { this.body.question = q; return this; }
specialty(s: string) { this.body.specialty = s; return this; }
maxResults(n: number) { this.body.max_results = Math.min(n, 50); return this; }
evidenceLevel(level: 'meta-analysis' | 'rct' | 'cohort' | 'any') { this.body.evidence_level = level; return this; }
yearRange(from: number, to: number) { .. = { , to }; ; }
() { .; }
}
interface EvidenceResponse {
answer: string; confidence: number; citations: Citation[]; specialty: string;
}
interface Citation {
id: string; title: string; authors: string[]; journal: string; year: number;
doi: string; evidence_level: 'meta-analysis' | 'rct' | 'cohort' | 'case-report'; abstract: string;
}
interface Guideline {
id: string; organization: string; title: string; year: number;
recommendation: string; strength: 'strong' | 'moderate' | 'weak';
}
interface DrugInteraction {
drug_a: string; drug_b: string; severity: 'major' | | ;
: ; : [];
}
export function mockCitation(overrides: Partial<Citation> = {}): Citation {
return { id: 'cite-001', title: 'Statin Therapy in Older Adults', authors: ['Smith J', 'Doe A'],
journal: 'NEJM', year: 2024, doi: '10.1056/NEJMoa2401234',
evidence_level: 'rct', abstract: 'Background: ...', ...overrides };
}
export function mockEvidenceResponse(citationCount = 3): EvidenceResponse {
return { answer: 'Evidence supports moderate-intensity statin therapy...', confidence: 0.87,
citations: Array.from({ length: citationCount }, (_, i) => mockCitation({ id: `cite-${i}` })),
specialty: 'cardiology' };
}
| Pattern | When to Use | Example |
|---|---|---|
safeCall wrapper | All API calls | Structured error with clinical operation context |
| Retry on 429 | Batch evidence queries | 5s backoff before retry |
| 422 validation | Malformed clinical queries | Clear message on rejected terminology |
| Citation chain audit | Compliance reporting | Preserve full provenance from response |
Apply patterns in openevidence-core-workflow-a.